
Namespace WoWArmoryParser
  Public Class MeleeInfo
    Public Sub New()
      _MainHand = New WeaponInfo
      _OffHand = New WeaponInfo
      _HitRating = New HitRatingInfo
      _Crit = New CritInfo
      _AttackPower = New AttackPowerInfo
      _Expertise = New ExpertiseInfo
    End Sub

    Protected _MainHand As WeaponInfo
    Protected _OffHand As WeaponInfo
    Protected _HitRating As HitRatingInfo
    Protected _Crit As CritInfo
    Protected _AttackPower As AttackPowerInfo
    Protected _Expertise As ExpertiseInfo

    Public ReadOnly Property MainHand() As WeaponInfo
      Get
        Return _MainHand
      End Get
    End Property

    Public ReadOnly Property OffHand() As WeaponInfo
      Get
        Return _OffHand
      End Get
    End Property

    Public ReadOnly Property HitRating() As HitRatingInfo
      Get
        Return _HitRating
      End Get
    End Property

    Public ReadOnly Property CritChance() As CritInfo
      Get
        Return _Crit
      End Get
    End Property

    Public ReadOnly Property AttackPower() As AttackPowerInfo
      Get
        Return _AttackPower
      End Get
    End Property

    Public ReadOnly Property Expertise() As ExpertiseInfo
      Get
        Return _Expertise
      End Get
    End Property
  End Class

  Public Class RangedInfo
    Public Sub New()
      _Weapon = New WeaponInfo
      _HitRating = New HitRatingInfo
      _Crit = New CritInfo
      _AttackPower = New AttackPowerInfo
    End Sub

    Protected _Weapon As WeaponInfo
    Protected _HitRating As HitRatingInfo
    Protected _Crit As CritInfo
    Protected _AttackPower As AttackPowerInfo

    Public ReadOnly Property Weapon() As WeaponInfo
      Get
        Return _Weapon
      End Get
    End Property

    Public ReadOnly Property HitRating() As HitRatingInfo
      Get
        Return _HitRating
      End Get
    End Property

    Public ReadOnly Property CritChance() As CritInfo
      Get
        Return _Crit
      End Get
    End Property

    Public ReadOnly Property AttackPower() As AttackPowerInfo
      Get
        Return _AttackPower
      End Get
    End Property
  End Class

  Public Class SpellInfo

    Public Sub New()
      _Arcane = New SpellSchool
      _Fire = New SpellSchool
      _Frost = New SpellSchool
      _Holy = New SpellSchool
      _Nature = New SpellSchool
      _Shadow = New SpellSchool

      _HitRating = New HitRatingInfo
      _ManaRegen = New ManaRegenInfo
      _HasteRating = New HasteRatingInfo
    End Sub

    Protected _Arcane As SpellSchool
    Protected _Fire As SpellSchool
    Protected _Frost As SpellSchool
    Protected _Holy As SpellSchool
    Protected _Nature As SpellSchool
    Protected _Shadow As SpellSchool

    Public ReadOnly Property Arcane() As SpellSchool
      Get
        Return _Arcane
      End Get
    End Property

    Public ReadOnly Property Fire() As SpellSchool
      Get
        Return _Fire
      End Get
    End Property

    Public ReadOnly Property Frost() As SpellSchool
      Get
        Return _Frost
      End Get
    End Property

    Public ReadOnly Property Holy() As SpellSchool
      Get
        Return _Holy
      End Get
    End Property

    Public ReadOnly Property Nature() As SpellSchool
      Get
        Return _Nature
      End Get
    End Property

    Public ReadOnly Property Shadow() As SpellSchool
      Get
        Return _Shadow
      End Get
    End Property

    Protected _CritRating As Integer
    Public Property CritRating() As Integer
      Get
        Return _CritRating
      End Get
      Set(ByVal value As Integer)
        _CritRating = value
      End Set
    End Property

    ''2009-07-17 - Cliff Simpkins - Added haste rating
    Protected _HasteRating As HasteRatingInfo
    Public ReadOnly Property HasteRating() As HasteRatingInfo
      Get
        Return _HasteRating
      End Get
    End Property

    Protected _HitRating As HitRatingInfo
    Public ReadOnly Property HitRating() As HitRatingInfo
      Get
        Return _HitRating
      End Get
    End Property

    Protected _ManaRegen As ManaRegenInfo
    Public ReadOnly Property ManaRegen() As ManaRegenInfo
      Get
        Return _ManaRegen
      End Get
    End Property

    Protected _SpellPenetration As Integer
    Public Property SpellPenetration() As Integer
      Get
        Return _SpellPenetration
      End Get
      Set(ByVal value As Integer)
        _SpellPenetration = value
      End Set
    End Property

    Protected _HealingBonus As Integer
    Public Property HealingBonus() As Integer
      Get
        Return _HealingBonus
      End Get
      Set(ByVal value As Integer)
        _HealingBonus = value
      End Set
    End Property
  End Class

  Public Class DefenseInfo
    Public Sub New()
      _Armor = New ArmorInfo
      _Defense = New DefenseStatInfo
      _Parry = New ParryInfo
      _Block = New BlockInfo
      _Dodge = New DodgeInfo
      _Resilience = New ResilienceInfo
    End Sub

    Protected _Armor As ArmorInfo
    Protected _Defense As DefenseStatInfo
    Protected _Dodge As DodgeInfo
    Protected _Parry As ParryInfo
    Protected _Block As BlockInfo
    Protected _Resilience As ResilienceInfo

    Public ReadOnly Property Armor() As ArmorInfo
      Get
        Return _Armor
      End Get
    End Property

    Public ReadOnly Property Defense() As DefenseStatInfo
      Get
        Return _Defense
      End Get
    End Property

    Public ReadOnly Property Dodge() As DodgeInfo
      Get
        Return _Dodge
      End Get
    End Property

    Public ReadOnly Property Parry() As ParryInfo
      Get
        Return _Parry
      End Get
    End Property

    Public ReadOnly Property Block() As BlockInfo
      Get
        Return _Block
      End Get
    End Property

    Public ReadOnly Property Resilience() As ResilienceInfo
      Get
        Return _Resilience
      End Get
    End Property
  End Class

  Public Class ManaRegenInfo
    Protected _WhileCasting As Double
    Protected _WhileNotCasting As Double

    Public Property WhileCasting() As Double
      Get
        Return _WhileCasting
      End Get
      Set(ByVal value As Double)
        _WhileCasting = value
      End Set
    End Property

    Public Property WhileNotCasting() As Double
      Get
        Return _WhileNotCasting
      End Get
      Set(ByVal value As Double)
        _WhileNotCasting = value
      End Set
    End Property
  End Class

  ''2009-07-17 - Cliff Simpkins - Added haste rating
  Public Class HasteRatingInfo
    Protected _HastePercentage As Double
    Protected _HasteRating As Integer

    Public Property HastePercentage() As Double
      Get
        Return _HastePercentage
      End Get
      Set(ByVal value As Double)
        _HastePercentage = value
      End Set
    End Property

    Public Property HasteRating() As Integer
      Get
        Return _HasteRating
      End Get
      Set(ByVal value As Integer)
        _HasteRating = value
      End Set
    End Property
  End Class

  Public Class HitRatingInfo
    Protected _IncreasedHitChance As Double
    Protected _Penetration As Integer
    Protected _Value As Integer

    Public Property IncreasedHitChance() As Double
      Get
        Return _IncreasedHitChance
      End Get
      Set(ByVal value As Double)
        _IncreasedHitChance = value
      End Set
    End Property

    Public Property Penetration() As Integer
      Get
        Return _Penetration
      End Get
      Set(ByVal value As Integer)
        _Penetration = value
      End Set
    End Property

    Public Property Value() As Integer
      Get
        Return _Value
      End Get
      Set(ByVal value As Integer)
        _Value = value
      End Set
    End Property
  End Class

  Public Class SpellSchool
    Public Sub New()

    End Sub

    Protected _BonusDmg As Integer
    Protected _CritChance As Double

    Public Property DamageBonus() As Integer
      Get
        Return _BonusDmg
      End Get
      Set(ByVal value As Integer)
        _BonusDmg = value
      End Set
    End Property

    Public Property CritChance() As Double
      Get
        Return _CritChance
      End Get
      Set(ByVal value As Double)
        _CritChance = value
      End Set
    End Property
  End Class

  Public Class WeaponInfo
    Public Sub New()
      _Skill = New SkillInfo
      _Damage = New DamageInfo
      _Speed = New SpeedInfo
    End Sub

    Public ReadOnly Property Skill() As SkillInfo
      Get
        Return _Skill
      End Get
    End Property

    Public ReadOnly Property Damage() As DamageInfo
      Get
        Return _Damage
      End Get
    End Property

    Public ReadOnly Property Speed() As SpeedInfo
      Get
        Return _Speed
      End Get
    End Property

    Protected _Skill As SkillInfo
    Protected _Damage As DamageInfo
    Protected _Speed As SpeedInfo

  End Class

  Public Class SkillInfo
    Protected _Rating As Integer
    Protected _Value As Integer

    Public Property Rating() As Integer
      Get
        Return _Rating
      End Get
      Set(ByVal value As Integer)
        _Rating = value
      End Set
    End Property

    Public Property Value() As Integer
      Get
        Return _Value
      End Get
      Set(ByVal value As Integer)
        _Value = value
      End Set
    End Property
  End Class

  Public Class DamageInfo
    Protected _DPS As Double
    Protected _Max As Integer
    Protected _Min As Integer
    Protected _Percent As Double
    Protected _Speed As Double

    Public Property DPS() As Double
      Get
        Return _DPS
      End Get
      Set(ByVal value As Double)
        _DPS = value
      End Set
    End Property

    Public Property Max() As Integer
      Get
        Return _Max
      End Get
      Set(ByVal value As Integer)
        _Max = value
      End Set
    End Property

    Public Property Min() As Integer
      Get
        Return _Min
      End Get
      Set(ByVal value As Integer)
        _Min = value
      End Set
    End Property

    Public Property Percent() As Double
      Get
        Return _Percent
      End Get
      Set(ByVal value As Double)
        _Percent = value
      End Set
    End Property

    Public Property Speed() As Double
      Get
        Return _Speed
      End Get
      Set(ByVal value As Double)
        _Speed = value
      End Set
    End Property
  End Class

  Public Class SpeedInfo
    Protected _HastePercent As Double
    Protected _HasteRating As Integer
    Protected _Value As Double

    Public Property HastePercent() As Double
      Get
        Return _HastePercent
      End Get
      Set(ByVal value As Double)
        _HastePercent = value
      End Set
    End Property

    Public Property HasteRating() As Integer
      Get
        Return _HasteRating
      End Get
      Set(ByVal value As Integer)
        _HasteRating = value
      End Set
    End Property

    Public Property Value() As Double
      Get
        Return _Value
      End Get
      Set(ByVal value As Double)
        _Value = value
      End Set
    End Property
  End Class

  Public Class RatingStat
    Protected _Percent As Double
    Protected _IncreasedByRating As Double
    Protected _Rating As Double

    Public Property Percent() As Double
      Get
        Return _Percent
      End Get
      Set(ByVal value As Double)
        _Percent = value
      End Set
    End Property

    Public Property IncreasedByRating() As Double
      Get
        Return _IncreasedByRating
      End Get
      Set(ByVal value As Double)
        _IncreasedByRating = value
      End Set
    End Property

    Public Property Rating() As Double
      Get
        Return _Rating
      End Get
      Set(ByVal value As Double)
        _Rating = value
      End Set
    End Property
  End Class

  Public Class CritInfo
    Inherits RatingStat
  End Class

  Public Class AttackPowerInfo

    Protected _Base As Integer
    Protected _Effective As Integer
    Protected _IncreasedDPS As Double

    Public Property Base() As Integer
      Get
        Return _Base
      End Get
      Set(ByVal value As Integer)
        _Base = value
      End Set
    End Property

    Public Property Effective() As Integer
      Get
        Return _Effective
      End Get
      Set(ByVal value As Integer)
        _Effective = value
      End Set
    End Property

    Public Property IncreasedDPS() As Double
      Get
        Return _IncreasedDPS
      End Get
      Set(ByVal value As Double)
        _IncreasedDPS = value
      End Set
    End Property
  End Class

  Public Class ArmorInfo
    Protected _Base As Integer
    Protected _Effective As Integer
    Protected _DamageReductionPercent As Double

    Public Property Base() As Integer
      Get
        Return _Base
      End Get
      Set(ByVal value As Integer)
        _Base = value
      End Set
    End Property

    Public Property Effective() As Integer
      Get
        Return _Effective
      End Get
      Set(ByVal value As Integer)
        _Effective = value
      End Set
    End Property

    Public Property DamageReductionPercent() As Double
      Get
        Return _DamageReductionPercent
      End Get
      Set(ByVal value As Double)
        _DamageReductionPercent = value
      End Set
    End Property
  End Class

  Public Class DefenseStatInfo

    Protected _Rating As Double
    Public Property Rating() As Double
      Get
        Return _Rating
      End Get
      Set(ByVal value As Double)
        _Rating = value
      End Set
    End Property

    Protected _Value As Double
    Public Property Value() As Double
      Get
        Return _Value
      End Get
      Set(ByVal value As Double)
        _Value = value
      End Set
    End Property
  End Class

  Public Class DodgeInfo
    Inherits RatingStat
  End Class

  ''2009-07-17 - Cliff Simpkins - Added haste rating
  Public Class ExpertiseInfo

    Protected _Additional As Integer
    Protected _Percent As Double
    Protected _Rating As Integer
    Protected _Value As Integer

    Public Property Additional() As Integer
      Get
        Return _Additional
      End Get
      Set(ByVal value As Integer)
        _Additional = value
      End Set
    End Property

    Public Property Percent() As Double
      Get
        Return _Percent
      End Get
      Set(ByVal value As Double)
        _Percent = value
      End Set
    End Property

    Public Property Rating() As Integer
      Get
        Return _Rating
      End Get
      Set(ByVal value As Integer)
        _Rating = value
      End Set
    End Property

    Public Property Value() As Integer
      Get
        Return _Value
      End Get
      Set(ByVal value As Integer)
        _Value = value
      End Set
    End Property

  End Class

  Public Class ParryInfo
    Inherits RatingStat
  End Class

  Public Class BlockInfo
    Inherits RatingStat
  End Class

  Public Class ResilienceInfo
    Protected _Damage As Double
    Protected _Hit As Double
    Protected _Rating As Double

    Public Property DamageReduction() As Double
      Get
        Return _Damage
      End Get
      Set(ByVal value As Double)
        _Damage = value
      End Set
    End Property

    Public Property HitReduction() As Double
      Get
        Return _Hit
      End Get
      Set(ByVal value As Double)
        _Hit = value
      End Set
    End Property

    Public Property Rating() As Double
      Get
        Return _Rating
      End Get
      Set(ByVal value As Double)
        _Rating = value
      End Set
    End Property
  End Class
End Namespace
